在Sprint MVC中controller裡面,大家可能在學習或工作時都會看到
@GetMapping 和 @RequestMapping。但究竟它們有什麼分別呢?
@GetMapping是在Spring4.3時才有的,在意思上@GetMapping 就是@RequestMapping (method = RequestMethod.GET)
@GetMapping 可在method層面上用作處理 http 的請求。
@RequestMapping 可在class層面上配合@GetMapping 使用。
例子:
@Controller
@RequestMapping("/orders")/* 具體指出request的類別*/
public class OrderController {
@GetMapping("/current")/* @GetMapping 配合@RequestMapping使用
當HTTP GET request是 /order時,
orderForm() 會被觸發。 */
public String orderForm(Model model) {
model.addAttribute("order", new Order());
return "orderForm";
}
}
相關參考是來自Craig Walls寫得一本書:
@GetMapping 與 @RequestMapping 不能互相交換。
第1,
@GetMapping的位置只能在class之內,而@RequestMapping在內外也可以
如上圖所示,@GetMapping的位置是有限制性的。
@GetMapping 與 @RequestMapping混合使用
第一,建立一個新的子folder灰static底下。
在C:\Users\martinyeung\eclipse-workspace\spring-project-2026\src\main\resources\static下創建一個folder叫qq,同時將所有在static底下的文件都轉移到qq底下。
第2, 修改代碼
可以繼續用上次創建的SpringBootHelloWorld,java
把代碼修改成以下
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/qq")
//@RequestMapping(value = "/qq", method = RequestMethod.GET)
public class SpringBootHelloWorld {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
@GetMapping("/x")
public String hello(){
return "Hey, Spring Boot 的 Hello World !";
}
@GetMapping("/indexx")
public String helloIndex(){
return "index";
}
}
儲存SpringBootHelloWorld,java
再開啟sprint boot app
成功的話會出現以上畫面。
假如你沒有將static底下的所有文件轉移到qq之下,就會出現以下畫面:
即使你能夠成功去到想去的頁面,不過所有靜態資源都不能使用。
你可以在瀏覽器上輸入http://localhost:8080/qq/indexx
然後再按F12查看一下console
你會看到所有靜態資源都會出現同一個報錯:
GET http://localhost:8080/qq/vendor/daterangepicker/daterangepicker.js net::ERR_ABORTED 404
為什麼會這樣呢?
因為@RequestMapping或@GetMapping都與靜態資源的關係密切。
假設你設計的網頁有不同語言,可以透過@RequestMapping/@GetMapping來控制使用的靜態資源。
所以必須確定所輸入的路徑是有相對應的靜態資源。
參考文章/網站/書本: